package net.lqy.aipan.util;

import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @title: SpringBeanUtil
 * @Author lqy
 * @Date: 2025-05-30 12:14
 * @Version 1.0
 */
public class SpringBeanUtil {
    /**
     * 复制属性
     *
     * @param <T>       目标对象类型
     * @param source    源对象
     * @param target    目标对象类型
     * @return          复制后的目标对象
     */
    public static <T> T copyProperties(Object source, Class<T> target) {
        try {
            // 创建目标对象实例
            T t = target.getConstructor().newInstance();
            // 使用BeanUtils.copyProperties进行属性复制
            BeanUtils.copyProperties(source, t);
            return t;
        } catch (Exception e) {
            // 如果发生异常，则抛出RuntimeException
            throw new RuntimeException(e);
        }
    }

    /**
     * 复制一份具有相同属性的列表
     *
     * @param sourceList 源列表
     * @param target     目标对象的类型
     * @param <T>        目标对象的类型
     * @return           复制后的目标列表
     */
    public static <T> List<T> copyProperties(List<?> sourceList, Class<T> target) {
        ArrayList<T> targetList = new ArrayList<>();

        // 遍历源列表中的每个元素，并调用copyProperties方法进行属性复制
        sourceList.forEach(source -> {
            T t = copyProperties(source, target);
            targetList.add(t);
        });

        return targetList;
    }

    public static void  copyProperties(Object source, Object target) {
        BeanUtils.copyProperties(source, target);
    }
}
